<!DOCTYPE html>
<html lang="en">

<head>
  <base href="https://git-scm.com/book/zh/v2/GitHub-%E7%BB%B4%E6%8A%A4%E9%A1%B9%E7%9B%AE" />
  <meta charset='utf-8'>
  <meta content='IE=edge,chrome=1' http-equiv='X-UA-Compatible'>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Git - 维护项目</title>

  <link href='/favicon.ico' rel='shortcut icon' type='image/x-icon'>

  <link rel="stylesheet" media="screen" href="/assets/application-a058ab010d6f86a86903175bbfdaac30ef6057e5901875616753328abbf98b2c.css" />
  <script src="/assets/modernize-b3ebe0c31c24f230dc62179d3e1030d2e57a53b1668d9382c0a27dbd44a94beb.js"></script>
  <!--[if (gte IE 6)&(lte IE 8)]>
  <script src="/javascripts/selectivizr-min.js"></script>
  <![endif]-->

</head>

<body id="documentation">

  <div class="inner">
    <header>

  <a href="/"><img src="/images/logo@2x.png" width="110" height="46" alt="Git" /></a>
  <span id="tagline"></span>
  <script type="text/javascript">
    var taglines = ["fast-version-control","everything-is-local","distributed-even-if-your-workflow-isnt","local-branching-on-the-cheap","distributed-is-the-new-centralized"];
    var tagline = taglines[Math.floor(Math.random() * taglines.length)];
    document.getElementById('tagline').innerHTML = '--' + tagline;
  </script>
  <form id="search" action="/search/results">
    <input id="search-text" name="search" placeholder="Search entire site..." autocomplete="off" type="text" />
  </form>
  <div id="search-results"></div>

</header>

  </div> <!-- .inner -->

    <div class="inner">
      <div id="content-wrapper">
        <button class="sidebar-btn"></button>
<aside class="sidebar" id="sidebar">
  <nav>
    <ul>
      <li>
        <a href="/about">About</a>
        <ul class="">
          <li>
            <a href="/about">Branching and Merging</a>
          </li>
          <li>
            <a href="/about/small-and-fast">Small and Fast</a>
          </li>
          <li>
            <a href="/about/distributed">Distributed</a>
          </li>
          <li>
            <a href="/about/info-assurance">Data Assurance</a>
          </li>
          <li>
            <a href="/about/staging-area">Staging Area</a>
          </li>
          <li>
            <a href="/about/free-and-open-source">Free and Open Source</a>
          </li>
          <li>
            <a href="/about/trademark">Trademark</a>
          </li>
        </ul>
      </li>
      <li>
        <a class="active" href="/doc">Documentation</a>
        <ul class="expanded">
          <li>
            <a href="/docs">Reference</a>
          </li>
          <li>
            <a class="active" href="/book">Book</a>
          </li>
          <li>
            <a href="/videos">Videos</a>
          </li>
          <li>
            <a href="/doc/ext">External Links</a>
          </li>
        </ul>
      </li>
      <li>
        <a href="/downloads">Downloads</a>
        <ul class="">
          <li>
            <a href="/downloads/guis">GUI Clients</a>
          </li>
          <li>
            <a href="/downloads/logos">Logos</a>
          </li>
        </ul>
      </li>
      <li>
        <a href="/community">Community</a>
      </li>
    </ul>
      <hr class="sidebar">
        <p>
This book is available in
  <a href="/book/en">English</a>.
</p>
<p>
  Full translation available in
  <table>
    <tr><td><a href="/book/az">azərbaycan dili</a>,</td></tr>
    <tr><td><a href="/book/bg">български език</a>,</td></tr>
    <tr><td><a href="/book/de">Deutsch</a>,</td></tr>
    <tr><td><a href="/book/es">Español</a>,</td></tr>
    <tr><td><a href="/book/fr">Français</a>,</td></tr>
    <tr><td><a href="/book/gr">Ελληνικά</a>,</td></tr>
    <tr><td><a href="/book/ja">日本語</a>,</td></tr>
    <tr><td><a href="/book/ko">한국어</a>,</td></tr>
    <tr><td><a href="/book/nl">Nederlands</a>,</td></tr>
    <tr><td><a href="/book/ru">Русский</a>,</td></tr>
    <tr><td><a href="/book/sl">Slovenščina</a>,</td></tr>
    <tr><td><a href="/book/tl">Tagalog</a>,</td></tr>
    <tr><td><a href="/book/uk">Українська</a></td></tr>
    <tr><td><a href="/book/zh">简体中文</a>,</td></tr>
  </table>
</p>
<p>
  Partial translations available in
  <table>
    <tr><td><a href="/book/cs">Čeština</a>,</td></tr>
    <tr><td><a href="/book/mk">Македонски</a>,</td></tr>
    <tr><td><a href="/book/pl">Polski</a>,</td></tr>
    <tr><td><a href="/book/sr">Српски</a>,</td></tr>
    <tr><td><a href="/book/uz">Ўзбекча</a>,</td></tr>
    <tr><td><a href="/book/zh-tw">繁體中文</a>,</td></tr>
  </table>
</p>
<p>
  Translations started for
  <table>
    <tr><td><a href="/book/be">Беларуская</a>,</td></tr>
    <tr><td><a href="/book/fa" dir="rtl">فارسی</a>,</td></tr>
    <tr><td><a href="/book/id">Indonesian</a>,</td></tr>
    <tr><td><a href="/book/it">Italiano</a>,</td></tr>
    <tr><td><a href="/book/ms">Bahasa Melayu</a>,</td></tr>
    <tr><td><a href="/book/pt-br">Português (Brasil)</a>,</td></tr>
    <tr><td><a href="/book/pt-pt">Português (Portugal)</a>,</td></tr>
    <tr><td><a href="/book/sv">Svenska</a>,</td></tr>
    <tr><td><a href="/book/tr">Türkçe</a>.</td></tr>
  </table>
</p>
<hr class="sidebar"/>
<p>
The source of this book is  <a href="https://github.com/progit/progit2-zh">hosted on GitHub.</a></br>
Patches, suggestions and comments are welcome.
</p>


  </nav>
</aside>

        <div id="content">
          

<div id='book-chapters'>
  <a class="dropdown-trigger" id="book-chapters-trigger" data-panel-id="chapters-dropdown" href="#">Chapters ▾</a>
<div class='dropdown-panel' id='chapters-dropdown'>
  <div class="three-column">
    <div class='column-left'>
      <ol class='book-toc'>
  <li class='chapter'>
  <h2>1. <a href="/book/zh/v2/%E8%B5%B7%E6%AD%A5-%E5%85%B3%E4%BA%8E%E7%89%88%E6%9C%AC%E6%8E%A7%E5%88%B6">起步</a></h2>
    <ol>
        <li>
          1.1
          <a href="/book/zh/v2/%E8%B5%B7%E6%AD%A5-%E5%85%B3%E4%BA%8E%E7%89%88%E6%9C%AC%E6%8E%A7%E5%88%B6" >关于版本控制 </a>
        </li>
        <li>
          1.2
          <a href="/book/zh/v2/%E8%B5%B7%E6%AD%A5-Git-%E7%AE%80%E5%8F%B2" >Git 简史 </a>
        </li>
        <li>
          1.3
          <a href="/book/zh/v2/%E8%B5%B7%E6%AD%A5-Git-%E6%98%AF%E4%BB%80%E4%B9%88%EF%BC%9F" >Git 是什么？ </a>
        </li>
        <li>
          1.4
          <a href="/book/zh/v2/%E8%B5%B7%E6%AD%A5-%E5%91%BD%E4%BB%A4%E8%A1%8C" >命令行 </a>
        </li>
        <li>
          1.5
          <a href="/book/zh/v2/%E8%B5%B7%E6%AD%A5-%E5%AE%89%E8%A3%85-Git" >安装 Git </a>
        </li>
        <li>
          1.6
          <a href="/book/zh/v2/%E8%B5%B7%E6%AD%A5-%E5%88%9D%E6%AC%A1%E8%BF%90%E8%A1%8C-Git-%E5%89%8D%E7%9A%84%E9%85%8D%E7%BD%AE" >初次运行 Git 前的配置 </a>
        </li>
        <li>
          1.7
          <a href="/book/zh/v2/%E8%B5%B7%E6%AD%A5-%E8%8E%B7%E5%8F%96%E5%B8%AE%E5%8A%A9" >获取帮助 </a>
        </li>
        <li>
          1.8
          <a href="/book/zh/v2/%E8%B5%B7%E6%AD%A5-%E6%80%BB%E7%BB%93" >总结 </a>
        </li>
    </ol>
  </li>
  <li class='chapter'>
  <h2>2. <a href="/book/zh/v2/Git-%E5%9F%BA%E7%A1%80-%E8%8E%B7%E5%8F%96-Git-%E4%BB%93%E5%BA%93">Git 基础</a></h2>
    <ol>
        <li>
          2.1
          <a href="/book/zh/v2/Git-%E5%9F%BA%E7%A1%80-%E8%8E%B7%E5%8F%96-Git-%E4%BB%93%E5%BA%93" >获取 Git 仓库 </a>
        </li>
        <li>
          2.2
          <a href="/book/zh/v2/Git-%E5%9F%BA%E7%A1%80-%E8%AE%B0%E5%BD%95%E6%AF%8F%E6%AC%A1%E6%9B%B4%E6%96%B0%E5%88%B0%E4%BB%93%E5%BA%93" >记录每次更新到仓库 </a>
        </li>
        <li>
          2.3
          <a href="/book/zh/v2/Git-%E5%9F%BA%E7%A1%80-%E6%9F%A5%E7%9C%8B%E6%8F%90%E4%BA%A4%E5%8E%86%E5%8F%B2" >查看提交历史 </a>
        </li>
        <li>
          2.4
          <a href="/book/zh/v2/Git-%E5%9F%BA%E7%A1%80-%E6%92%A4%E6%B6%88%E6%93%8D%E4%BD%9C" >撤消操作 </a>
        </li>
        <li>
          2.5
          <a href="/book/zh/v2/Git-%E5%9F%BA%E7%A1%80-%E8%BF%9C%E7%A8%8B%E4%BB%93%E5%BA%93%E7%9A%84%E4%BD%BF%E7%94%A8" >远程仓库的使用 </a>
        </li>
        <li>
          2.6
          <a href="/book/zh/v2/Git-%E5%9F%BA%E7%A1%80-%E6%89%93%E6%A0%87%E7%AD%BE" >打标签 </a>
        </li>
        <li>
          2.7
          <a href="/book/zh/v2/Git-%E5%9F%BA%E7%A1%80-Git-%E5%88%AB%E5%90%8D" >Git 别名 </a>
        </li>
        <li>
          2.8
          <a href="/book/zh/v2/Git-%E5%9F%BA%E7%A1%80-%E6%80%BB%E7%BB%93" >总结 </a>
        </li>
    </ol>
  </li>
  <li class='chapter'>
  <h2>3. <a href="/book/zh/v2/Git-%E5%88%86%E6%94%AF-%E5%88%86%E6%94%AF%E7%AE%80%E4%BB%8B">Git 分支</a></h2>
    <ol>
        <li>
          3.1
          <a href="/book/zh/v2/Git-%E5%88%86%E6%94%AF-%E5%88%86%E6%94%AF%E7%AE%80%E4%BB%8B" >分支简介 </a>
        </li>
        <li>
          3.2
          <a href="/book/zh/v2/Git-%E5%88%86%E6%94%AF-%E5%88%86%E6%94%AF%E7%9A%84%E6%96%B0%E5%BB%BA%E4%B8%8E%E5%90%88%E5%B9%B6" >分支的新建与合并 </a>
        </li>
        <li>
          3.3
          <a href="/book/zh/v2/Git-%E5%88%86%E6%94%AF-%E5%88%86%E6%94%AF%E7%AE%A1%E7%90%86" >分支管理 </a>
        </li>
        <li>
          3.4
          <a href="/book/zh/v2/Git-%E5%88%86%E6%94%AF-%E5%88%86%E6%94%AF%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E6%B5%81" >分支开发工作流 </a>
        </li>
        <li>
          3.5
          <a href="/book/zh/v2/Git-%E5%88%86%E6%94%AF-%E8%BF%9C%E7%A8%8B%E5%88%86%E6%94%AF" >远程分支 </a>
        </li>
        <li>
          3.6
          <a href="/book/zh/v2/Git-%E5%88%86%E6%94%AF-%E5%8F%98%E5%9F%BA" >变基 </a>
        </li>
        <li>
          3.7
          <a href="/book/zh/v2/Git-%E5%88%86%E6%94%AF-%E6%80%BB%E7%BB%93" >总结 </a>
        </li>
    </ol>
  </li>
  <li class='chapter'>
  <h2>4. <a href="/book/zh/v2/%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E7%9A%84-Git-%E5%8D%8F%E8%AE%AE">服务器上的 Git</a></h2>
    <ol>
        <li>
          4.1
          <a href="/book/zh/v2/%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E7%9A%84-Git-%E5%8D%8F%E8%AE%AE" >协议 </a>
        </li>
        <li>
          4.2
          <a href="/book/zh/v2/%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E7%9A%84-Git-%E5%9C%A8%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E6%90%AD%E5%BB%BA-Git" >在服务器上搭建 Git </a>
        </li>
        <li>
          4.3
          <a href="/book/zh/v2/%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E7%9A%84-Git-%E7%94%9F%E6%88%90-SSH-%E5%85%AC%E9%92%A5" >生成 SSH 公钥 </a>
        </li>
        <li>
          4.4
          <a href="/book/zh/v2/%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E7%9A%84-Git-%E9%85%8D%E7%BD%AE%E6%9C%8D%E5%8A%A1%E5%99%A8" >配置服务器 </a>
        </li>
        <li>
          4.5
          <a href="/book/zh/v2/%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E7%9A%84-Git-Git-%E5%AE%88%E6%8A%A4%E8%BF%9B%E7%A8%8B" >Git 守护进程 </a>
        </li>
        <li>
          4.6
          <a href="/book/zh/v2/%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E7%9A%84-Git-Smart-HTTP" >Smart HTTP </a>
        </li>
        <li>
          4.7
          <a href="/book/zh/v2/%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E7%9A%84-Git-GitWeb" >GitWeb </a>
        </li>
        <li>
          4.8
          <a href="/book/zh/v2/%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E7%9A%84-Git-GitLab" >GitLab </a>
        </li>
        <li>
          4.9
          <a href="/book/zh/v2/%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E7%9A%84-Git-%E7%AC%AC%E4%B8%89%E6%96%B9%E6%89%98%E7%AE%A1%E7%9A%84%E9%80%89%E6%8B%A9" >第三方托管的选择 </a>
        </li>
        <li>
          4.10
          <a href="/book/zh/v2/%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E7%9A%84-Git-%E6%80%BB%E7%BB%93" >总结 </a>
        </li>
    </ol>
  </li>
  <li class='chapter'>
  <h2>5. <a href="/book/zh/v2/%E5%88%86%E5%B8%83%E5%BC%8F-Git-%E5%88%86%E5%B8%83%E5%BC%8F%E5%B7%A5%E4%BD%9C%E6%B5%81%E7%A8%8B">分布式 Git</a></h2>
    <ol>
        <li>
          5.1
          <a href="/book/zh/v2/%E5%88%86%E5%B8%83%E5%BC%8F-Git-%E5%88%86%E5%B8%83%E5%BC%8F%E5%B7%A5%E4%BD%9C%E6%B5%81%E7%A8%8B" >分布式工作流程 </a>
        </li>
        <li>
          5.2
          <a href="/book/zh/v2/%E5%88%86%E5%B8%83%E5%BC%8F-Git-%E5%90%91%E4%B8%80%E4%B8%AA%E9%A1%B9%E7%9B%AE%E8%B4%A1%E7%8C%AE" >向一个项目贡献 </a>
        </li>
        <li>
          5.3
          <a href="/book/zh/v2/%E5%88%86%E5%B8%83%E5%BC%8F-Git-%E7%BB%B4%E6%8A%A4%E9%A1%B9%E7%9B%AE" >维护项目 </a>
        </li>
        <li>
          5.4
          <a href="/book/zh/v2/%E5%88%86%E5%B8%83%E5%BC%8F-Git-%E6%80%BB%E7%BB%93" >总结 </a>
        </li>
    </ol>
  </li>
</ol>

    </div>
    <div class='column-middle'>
      <ol class='book-toc'>
  <li class='chapter'>
  <h2>6. <a href="/book/zh/v2/GitHub-%E8%B4%A6%E6%88%B7%E7%9A%84%E5%88%9B%E5%BB%BA%E5%92%8C%E9%85%8D%E7%BD%AE">GitHub</a></h2>
    <ol>
        <li>
          6.1
          <a href="/book/zh/v2/GitHub-%E8%B4%A6%E6%88%B7%E7%9A%84%E5%88%9B%E5%BB%BA%E5%92%8C%E9%85%8D%E7%BD%AE" >账户的创建和配置 </a>
        </li>
        <li>
          6.2
          <a href="/book/zh/v2/GitHub-%E5%AF%B9%E9%A1%B9%E7%9B%AE%E5%81%9A%E5%87%BA%E8%B4%A1%E7%8C%AE" >对项目做出贡献 </a>
        </li>
        <li>
          6.3
          <a href="/book/zh/v2/GitHub-%E7%BB%B4%E6%8A%A4%E9%A1%B9%E7%9B%AE" class=active>维护项目 </a>
        </li>
        <li>
          6.4
          <a href="/book/zh/v2/GitHub-%E7%AE%A1%E7%90%86%E7%BB%84%E7%BB%87" >管理组织 </a>
        </li>
        <li>
          6.5
          <a href="/book/zh/v2/GitHub-%E8%84%9A%E6%9C%AC-GitHub" >脚本 GitHub </a>
        </li>
        <li>
          6.6
          <a href="/book/zh/v2/GitHub-%E6%80%BB%E7%BB%93" >总结 </a>
        </li>
    </ol>
  </li>
  <li class='chapter'>
  <h2>7. <a href="/book/zh/v2/Git-%E5%B7%A5%E5%85%B7-%E9%80%89%E6%8B%A9%E4%BF%AE%E8%AE%A2%E7%89%88%E6%9C%AC">Git 工具</a></h2>
    <ol>
        <li>
          7.1
          <a href="/book/zh/v2/Git-%E5%B7%A5%E5%85%B7-%E9%80%89%E6%8B%A9%E4%BF%AE%E8%AE%A2%E7%89%88%E6%9C%AC" >选择修订版本 </a>
        </li>
        <li>
          7.2
          <a href="/book/zh/v2/Git-%E5%B7%A5%E5%85%B7-%E4%BA%A4%E4%BA%92%E5%BC%8F%E6%9A%82%E5%AD%98" >交互式暂存 </a>
        </li>
        <li>
          7.3
          <a href="/book/zh/v2/Git-%E5%B7%A5%E5%85%B7-%E8%B4%AE%E8%97%8F%E4%B8%8E%E6%B8%85%E7%90%86" >贮藏与清理 </a>
        </li>
        <li>
          7.4
          <a href="/book/zh/v2/Git-%E5%B7%A5%E5%85%B7-%E7%AD%BE%E7%BD%B2%E5%B7%A5%E4%BD%9C" >签署工作 </a>
        </li>
        <li>
          7.5
          <a href="/book/zh/v2/Git-%E5%B7%A5%E5%85%B7-%E6%90%9C%E7%B4%A2" >搜索 </a>
        </li>
        <li>
          7.6
          <a href="/book/zh/v2/Git-%E5%B7%A5%E5%85%B7-%E9%87%8D%E5%86%99%E5%8E%86%E5%8F%B2" >重写历史 </a>
        </li>
        <li>
          7.7
          <a href="/book/zh/v2/Git-%E5%B7%A5%E5%85%B7-%E9%87%8D%E7%BD%AE%E6%8F%AD%E5%AF%86" >重置揭密 </a>
        </li>
        <li>
          7.8
          <a href="/book/zh/v2/Git-%E5%B7%A5%E5%85%B7-%E9%AB%98%E7%BA%A7%E5%90%88%E5%B9%B6" >高级合并 </a>
        </li>
        <li>
          7.9
          <a href="/book/zh/v2/Git-%E5%B7%A5%E5%85%B7-Rerere" >Rerere </a>
        </li>
        <li>
          7.10
          <a href="/book/zh/v2/Git-%E5%B7%A5%E5%85%B7-%E4%BD%BF%E7%94%A8-Git-%E8%B0%83%E8%AF%95" >使用 Git 调试 </a>
        </li>
        <li>
          7.11
          <a href="/book/zh/v2/Git-%E5%B7%A5%E5%85%B7-%E5%AD%90%E6%A8%A1%E5%9D%97" >子模块 </a>
        </li>
        <li>
          7.12
          <a href="/book/zh/v2/Git-%E5%B7%A5%E5%85%B7-%E6%89%93%E5%8C%85" >打包 </a>
        </li>
        <li>
          7.13
          <a href="/book/zh/v2/Git-%E5%B7%A5%E5%85%B7-%E6%9B%BF%E6%8D%A2" >替换 </a>
        </li>
        <li>
          7.14
          <a href="/book/zh/v2/Git-%E5%B7%A5%E5%85%B7-%E5%87%AD%E8%AF%81%E5%AD%98%E5%82%A8" >凭证存储 </a>
        </li>
        <li>
          7.15
          <a href="/book/zh/v2/Git-%E5%B7%A5%E5%85%B7-%E6%80%BB%E7%BB%93" >总结 </a>
        </li>
    </ol>
  </li>
  <li class='chapter'>
  <h2>8. <a href="/book/zh/v2/%E8%87%AA%E5%AE%9A%E4%B9%89-Git-%E9%85%8D%E7%BD%AE-Git">自定义 Git</a></h2>
    <ol>
        <li>
          8.1
          <a href="/book/zh/v2/%E8%87%AA%E5%AE%9A%E4%B9%89-Git-%E9%85%8D%E7%BD%AE-Git" >配置 Git </a>
        </li>
        <li>
          8.2
          <a href="/book/zh/v2/%E8%87%AA%E5%AE%9A%E4%B9%89-Git-Git-%E5%B1%9E%E6%80%A7" >Git 属性 </a>
        </li>
        <li>
          8.3
          <a href="/book/zh/v2/%E8%87%AA%E5%AE%9A%E4%B9%89-Git-Git-%E9%92%A9%E5%AD%90" >Git 钩子 </a>
        </li>
        <li>
          8.4
          <a href="/book/zh/v2/%E8%87%AA%E5%AE%9A%E4%B9%89-Git-%E4%BD%BF%E7%94%A8%E5%BC%BA%E5%88%B6%E7%AD%96%E7%95%A5%E7%9A%84%E4%B8%80%E4%B8%AA%E4%BE%8B%E5%AD%90" >使用强制策略的一个例子 </a>
        </li>
        <li>
          8.5
          <a href="/book/zh/v2/%E8%87%AA%E5%AE%9A%E4%B9%89-Git-%E6%80%BB%E7%BB%93" >总结 </a>
        </li>
    </ol>
  </li>
  <li class='chapter'>
  <h2>9. <a href="/book/zh/v2/Git-%E4%B8%8E%E5%85%B6%E4%BB%96%E7%B3%BB%E7%BB%9F-%E4%BD%9C%E4%B8%BA%E5%AE%A2%E6%88%B7%E7%AB%AF%E7%9A%84-Git">Git 与其他系统</a></h2>
    <ol>
        <li>
          9.1
          <a href="/book/zh/v2/Git-%E4%B8%8E%E5%85%B6%E4%BB%96%E7%B3%BB%E7%BB%9F-%E4%BD%9C%E4%B8%BA%E5%AE%A2%E6%88%B7%E7%AB%AF%E7%9A%84-Git" >作为客户端的 Git </a>
        </li>
        <li>
          9.2
          <a href="/book/zh/v2/Git-%E4%B8%8E%E5%85%B6%E4%BB%96%E7%B3%BB%E7%BB%9F-%E8%BF%81%E7%A7%BB%E5%88%B0-Git" >迁移到 Git </a>
        </li>
        <li>
          9.3
          <a href="/book/zh/v2/Git-%E4%B8%8E%E5%85%B6%E4%BB%96%E7%B3%BB%E7%BB%9F-%E6%80%BB%E7%BB%93" >总结 </a>
        </li>
    </ol>
  </li>
  <li class='chapter'>
  <h2>10. <a href="/book/zh/v2/Git-%E5%86%85%E9%83%A8%E5%8E%9F%E7%90%86-%E5%BA%95%E5%B1%82%E5%91%BD%E4%BB%A4%E4%B8%8E%E4%B8%8A%E5%B1%82%E5%91%BD%E4%BB%A4">Git 内部原理</a></h2>
    <ol>
        <li>
          10.1
          <a href="/book/zh/v2/Git-%E5%86%85%E9%83%A8%E5%8E%9F%E7%90%86-%E5%BA%95%E5%B1%82%E5%91%BD%E4%BB%A4%E4%B8%8E%E4%B8%8A%E5%B1%82%E5%91%BD%E4%BB%A4" >底层命令与上层命令 </a>
        </li>
        <li>
          10.2
          <a href="/book/zh/v2/Git-%E5%86%85%E9%83%A8%E5%8E%9F%E7%90%86-Git-%E5%AF%B9%E8%B1%A1" >Git 对象 </a>
        </li>
        <li>
          10.3
          <a href="/book/zh/v2/Git-%E5%86%85%E9%83%A8%E5%8E%9F%E7%90%86-Git-%E5%BC%95%E7%94%A8" >Git 引用 </a>
        </li>
        <li>
          10.4
          <a href="/book/zh/v2/Git-%E5%86%85%E9%83%A8%E5%8E%9F%E7%90%86-%E5%8C%85%E6%96%87%E4%BB%B6" >包文件 </a>
        </li>
        <li>
          10.5
          <a href="/book/zh/v2/Git-%E5%86%85%E9%83%A8%E5%8E%9F%E7%90%86-%E5%BC%95%E7%94%A8%E8%A7%84%E8%8C%83" >引用规范 </a>
        </li>
        <li>
          10.6
          <a href="/book/zh/v2/Git-%E5%86%85%E9%83%A8%E5%8E%9F%E7%90%86-%E4%BC%A0%E8%BE%93%E5%8D%8F%E8%AE%AE" >传输协议 </a>
        </li>
        <li>
          10.7
          <a href="/book/zh/v2/Git-%E5%86%85%E9%83%A8%E5%8E%9F%E7%90%86-%E7%BB%B4%E6%8A%A4%E4%B8%8E%E6%95%B0%E6%8D%AE%E6%81%A2%E5%A4%8D" >维护与数据恢复 </a>
        </li>
        <li>
          10.8
          <a href="/book/zh/v2/Git-%E5%86%85%E9%83%A8%E5%8E%9F%E7%90%86-%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F" >环境变量 </a>
        </li>
        <li>
          10.9
          <a href="/book/zh/v2/Git-%E5%86%85%E9%83%A8%E5%8E%9F%E7%90%86-%E6%80%BB%E7%BB%93" >总结 </a>
        </li>
    </ol>
  </li>
</ol>

    </div>
    <div class='column-right'>
      <ol class='book-toc'>
  <li class='chapter'>
  <h2>A1. <a href="/book/zh/v2/%E9%99%84%E5%BD%95-A%3A-%E5%9C%A8%E5%85%B6%E5%AE%83%E7%8E%AF%E5%A2%83%E4%B8%AD%E4%BD%BF%E7%94%A8-Git-%E5%9B%BE%E5%BD%A2%E7%95%8C%E9%9D%A2">附录 A: 在其它环境中使用 Git</a></h2>
    <ol>
        <li>
          A1.1
          <a href="/book/zh/v2/%E9%99%84%E5%BD%95-A%3A-%E5%9C%A8%E5%85%B6%E5%AE%83%E7%8E%AF%E5%A2%83%E4%B8%AD%E4%BD%BF%E7%94%A8-Git-%E5%9B%BE%E5%BD%A2%E7%95%8C%E9%9D%A2" >图形界面 </a>
        </li>
        <li>
          A1.2
          <a href="/book/zh/v2/%E9%99%84%E5%BD%95-A%3A-%E5%9C%A8%E5%85%B6%E5%AE%83%E7%8E%AF%E5%A2%83%E4%B8%AD%E4%BD%BF%E7%94%A8-Git-Visual-Studio-%E4%B8%AD%E7%9A%84-Git" >Visual Studio 中的 Git </a>
        </li>
        <li>
          A1.3
          <a href="/book/zh/v2/%E9%99%84%E5%BD%95-A%3A-%E5%9C%A8%E5%85%B6%E5%AE%83%E7%8E%AF%E5%A2%83%E4%B8%AD%E4%BD%BF%E7%94%A8-Git-Visual-Studio-Code-%E4%B8%AD%E7%9A%84-Git" >Visual Studio Code 中的 Git </a>
        </li>
        <li>
          A1.4
          <a href="/book/zh/v2/%E9%99%84%E5%BD%95-A%3A-%E5%9C%A8%E5%85%B6%E5%AE%83%E7%8E%AF%E5%A2%83%E4%B8%AD%E4%BD%BF%E7%94%A8-Git-Eclipse-%E4%B8%AD%E7%9A%84-Git" >Eclipse 中的 Git </a>
        </li>
        <li>
          A1.5
          <a href="/book/zh/v2/%E9%99%84%E5%BD%95-A%3A-%E5%9C%A8%E5%85%B6%E5%AE%83%E7%8E%AF%E5%A2%83%E4%B8%AD%E4%BD%BF%E7%94%A8-Git-IntelliJ-%2F-PyCharm-%2F-WebStorm-%2F-PhpStorm-%2F-RubyMine-%E4%B8%AD%E7%9A%84-Git" >IntelliJ / PyCharm / WebStorm / PhpStorm / RubyMine 中的 Git </a>
        </li>
        <li>
          A1.6
          <a href="/book/zh/v2/%E9%99%84%E5%BD%95-A%3A-%E5%9C%A8%E5%85%B6%E5%AE%83%E7%8E%AF%E5%A2%83%E4%B8%AD%E4%BD%BF%E7%94%A8-Git-Sublime-Text-%E4%B8%AD%E7%9A%84-Git" >Sublime Text 中的 Git </a>
        </li>
        <li>
          A1.7
          <a href="/book/zh/v2/%E9%99%84%E5%BD%95-A%3A-%E5%9C%A8%E5%85%B6%E5%AE%83%E7%8E%AF%E5%A2%83%E4%B8%AD%E4%BD%BF%E7%94%A8-Git-Bash-%E4%B8%AD%E7%9A%84-Git" >Bash 中的 Git </a>
        </li>
        <li>
          A1.8
          <a href="/book/zh/v2/%E9%99%84%E5%BD%95-A%3A-%E5%9C%A8%E5%85%B6%E5%AE%83%E7%8E%AF%E5%A2%83%E4%B8%AD%E4%BD%BF%E7%94%A8-Git-Zsh-%E4%B8%AD%E7%9A%84-Git" >Zsh 中的 Git </a>
        </li>
        <li>
          A1.9
          <a href="/book/zh/v2/%E9%99%84%E5%BD%95-A%3A-%E5%9C%A8%E5%85%B6%E5%AE%83%E7%8E%AF%E5%A2%83%E4%B8%AD%E4%BD%BF%E7%94%A8-Git-Git-%E5%9C%A8-PowerShell-%E4%B8%AD%E4%BD%BF%E7%94%A8-Git" >Git 在 PowerShell 中使用 Git </a>
        </li>
        <li>
          A1.10
          <a href="/book/zh/v2/%E9%99%84%E5%BD%95-A%3A-%E5%9C%A8%E5%85%B6%E5%AE%83%E7%8E%AF%E5%A2%83%E4%B8%AD%E4%BD%BF%E7%94%A8-Git-%E6%80%BB%E7%BB%93" >总结 </a>
        </li>
    </ol>
  </li>
  <li class='chapter'>
  <h2>A2. <a href="/book/zh/v2/%E9%99%84%E5%BD%95-B%3A-%E5%9C%A8%E4%BD%A0%E7%9A%84%E5%BA%94%E7%94%A8%E4%B8%AD%E5%B5%8C%E5%85%A5-Git-%E5%91%BD%E4%BB%A4%E8%A1%8C-Git-%E6%96%B9%E5%BC%8F">附录 B: 在你的应用中嵌入 Git</a></h2>
    <ol>
        <li>
          A2.1
          <a href="/book/zh/v2/%E9%99%84%E5%BD%95-B%3A-%E5%9C%A8%E4%BD%A0%E7%9A%84%E5%BA%94%E7%94%A8%E4%B8%AD%E5%B5%8C%E5%85%A5-Git-%E5%91%BD%E4%BB%A4%E8%A1%8C-Git-%E6%96%B9%E5%BC%8F" >命令行 Git 方式 </a>
        </li>
        <li>
          A2.2
          <a href="/book/zh/v2/%E9%99%84%E5%BD%95-B%3A-%E5%9C%A8%E4%BD%A0%E7%9A%84%E5%BA%94%E7%94%A8%E4%B8%AD%E5%B5%8C%E5%85%A5-Git-Libgit2" >Libgit2 </a>
        </li>
        <li>
          A2.3
          <a href="/book/zh/v2/%E9%99%84%E5%BD%95-B%3A-%E5%9C%A8%E4%BD%A0%E7%9A%84%E5%BA%94%E7%94%A8%E4%B8%AD%E5%B5%8C%E5%85%A5-Git-JGit" >JGit </a>
        </li>
        <li>
          A2.4
          <a href="/book/zh/v2/%E9%99%84%E5%BD%95-B%3A-%E5%9C%A8%E4%BD%A0%E7%9A%84%E5%BA%94%E7%94%A8%E4%B8%AD%E5%B5%8C%E5%85%A5-Git-go-git" >go-git </a>
        </li>
        <li>
          A2.5
          <a href="/book/zh/v2/%E9%99%84%E5%BD%95-B%3A-%E5%9C%A8%E4%BD%A0%E7%9A%84%E5%BA%94%E7%94%A8%E4%B8%AD%E5%B5%8C%E5%85%A5-Git-Dulwich" >Dulwich </a>
        </li>
    </ol>
  </li>
  <li class='chapter'>
  <h2>A3. <a href="/book/zh/v2/%E9%99%84%E5%BD%95-C%3A-Git-%E5%91%BD%E4%BB%A4-%E8%AE%BE%E7%BD%AE%E4%B8%8E%E9%85%8D%E7%BD%AE">附录 C: Git 命令</a></h2>
    <ol>
        <li>
          A3.1
          <a href="/book/zh/v2/%E9%99%84%E5%BD%95-C%3A-Git-%E5%91%BD%E4%BB%A4-%E8%AE%BE%E7%BD%AE%E4%B8%8E%E9%85%8D%E7%BD%AE" >设置与配置 </a>
        </li>
        <li>
          A3.2
          <a href="/book/zh/v2/%E9%99%84%E5%BD%95-C%3A-Git-%E5%91%BD%E4%BB%A4-%E8%8E%B7%E5%8F%96%E4%B8%8E%E5%88%9B%E5%BB%BA%E9%A1%B9%E7%9B%AE" >获取与创建项目 </a>
        </li>
        <li>
          A3.3
          <a href="/book/zh/v2/%E9%99%84%E5%BD%95-C%3A-Git-%E5%91%BD%E4%BB%A4-%E5%BF%AB%E7%85%A7%E5%9F%BA%E7%A1%80" >快照基础 </a>
        </li>
        <li>
          A3.4
          <a href="/book/zh/v2/%E9%99%84%E5%BD%95-C%3A-Git-%E5%91%BD%E4%BB%A4-%E5%88%86%E6%94%AF%E4%B8%8E%E5%90%88%E5%B9%B6" >分支与合并 </a>
        </li>
        <li>
          A3.5
          <a href="/book/zh/v2/%E9%99%84%E5%BD%95-C%3A-Git-%E5%91%BD%E4%BB%A4-%E9%A1%B9%E7%9B%AE%E5%88%86%E4%BA%AB%E4%B8%8E%E6%9B%B4%E6%96%B0" >项目分享与更新 </a>
        </li>
        <li>
          A3.6
          <a href="/book/zh/v2/%E9%99%84%E5%BD%95-C%3A-Git-%E5%91%BD%E4%BB%A4-%E6%A3%80%E6%9F%A5%E4%B8%8E%E6%AF%94%E8%BE%83" >检查与比较 </a>
        </li>
        <li>
          A3.7
          <a href="/book/zh/v2/%E9%99%84%E5%BD%95-C%3A-Git-%E5%91%BD%E4%BB%A4-%E8%B0%83%E8%AF%95" >调试 </a>
        </li>
        <li>
          A3.8
          <a href="/book/zh/v2/%E9%99%84%E5%BD%95-C%3A-Git-%E5%91%BD%E4%BB%A4-%E8%A1%A5%E4%B8%81" >补丁 </a>
        </li>
        <li>
          A3.9
          <a href="/book/zh/v2/%E9%99%84%E5%BD%95-C%3A-Git-%E5%91%BD%E4%BB%A4-%E9%82%AE%E4%BB%B6" >邮件 </a>
        </li>
        <li>
          A3.10
          <a href="/book/zh/v2/%E9%99%84%E5%BD%95-C%3A-Git-%E5%91%BD%E4%BB%A4-%E5%A4%96%E9%83%A8%E7%B3%BB%E7%BB%9F" >外部系统 </a>
        </li>
        <li>
          A3.11
          <a href="/book/zh/v2/%E9%99%84%E5%BD%95-C%3A-Git-%E5%91%BD%E4%BB%A4-%E7%AE%A1%E7%90%86" >管理 </a>
        </li>
        <li>
          A3.12
          <a href="/book/zh/v2/%E9%99%84%E5%BD%95-C%3A-Git-%E5%91%BD%E4%BB%A4-%E5%BA%95%E5%B1%82%E5%91%BD%E4%BB%A4" >底层命令 </a>
        </li>
    </ol>
  </li>
</ol>

    </div>
  </div>
 </div>

    <span class="light" id="edition">
      2nd Edition
    </span>
</div>

<div id='main' class="book edition2">
    <h1>6.3 GitHub - 维护项目</h1>
  <div>
<h2 id="_maintaining_gh_project">维护项目</h2>
<div class="paragraph">
<p>现在我们可以很方便地向一个项目贡献内容，来看一下另一个方面的内容：创建、维护和管理你自己的项目。</p>
</div>
<div class="sect3">
<h3 id="_创建新的版本库">创建新的版本库</h3>
<div class="paragraph">
<p>让我们创建一个版本库来分享我们的项目。
通过点击面板右侧的“New repository”按钮，或者顶部工具条你用户名旁边的 <code>+</code> 按钮来开始我们的旅程。 参见 <a href="ch00/_new_repo_dropdown">这是 “New repository” 下拉列表.</a>。</p>
</div>
<div class="imageblock">
<div class="content">
<img src="/book/en/v2/images/newrepo.png" alt="“Your repositories” 区域.">
</div>
<div class="title">Figure 110. 这是 “Your repositories” 区域.</div>
</div>
<div id="_new_repo_dropdown" class="imageblock">
<div class="content">
<img src="/book/en/v2/images/new-repo.png" alt="“new repository” 下拉列表.">
</div>
<div class="title">Figure 111. 这是 “New repository” 下拉列表.</div>
</div>
<div class="paragraph">
<p>这会带你到 “new repository” 表单:</p>
</div>
<div class="imageblock">
<div class="content">
<img src="/book/en/v2/images/newrepoform.png" alt="“new repository” 表单。">
</div>
<div class="title">Figure 112. 这是 “new repository” 表单.</div>
</div>
<div class="paragraph">
<p>这里除了一个你必须要填的项目名，其他字段都是可选的。
现在只需要点击 “Create Repository” 按钮，Duang!!! – 你就在 GitHub 上拥有了一个以 <code>&lt;user&gt;/&lt;project_name&gt;</code> 命名的新仓库了。</p>
</div>
<div class="paragraph">
<p>因为目前暂无代码，GitHub 会显示有关创建新版本库或者关联到一个已有的 Git 版本库的一些说明。
我们不会在这里详细说明此项，如果你需要复习，去看 <a href="ch00/ch02-git-basics-chapter">Git 基础</a>。</p>
</div>
<div class="paragraph">
<p>现在你的项目就托管在 GitHub 上了，你可以把 URL 给任何你想分享的人。
GitHub 上的项目可通过 HTTP 或 SSH 访问，HTTPS 为 <code><a href="https://github.com/&lt;user&gt;/&lt;project_name&amp;gt" class="bare">https://github.com/&lt;user&gt;/&lt;project_name&amp;gt</a>;</code> ，
 SSH 为 <code>git@github.com:&lt;user&gt;/&lt;project_name&gt;</code> 。
Git 可以通过以上两种 URL 进行抓取和推送，但是用户的访问权限又因连接时使用的证书不同而异。</p>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
<div class="paragraph">
<p>通常对于公开项目可以优先分享基于 HTTPS 的 URL，因为用户克隆项目不需要有一个 GitHub 帐号。
如果你分享 SSH URL，用户必须有一个帐号并且上传 SSH 密钥才能访问你的项目。
HTTPS URL 与你贴到浏览器里查看项目用的地址是一样的。</p>
</div>
</td>
</tr>
</table>
</div>
</div>
<div class="sect3">
<h3 id="_添加合作者">添加合作者</h3>
<div class="paragraph">
<p>如果你想与他人合作，并想给他们提交的权限，你需要把他们添加为 “Collaborators”。
如果 Ben，Jeff，Louise 都在 GitHub 上注册了，你想给他们推送的权限，你可以将他们添加到你的项目。
这样做会给他们 “推送” 权限，就是说他们对项目和 Git 版本库都有读写的权限。</p>
</div>
<div class="paragraph">
<p>点击边栏底部的 “Settings” 链接。</p>
</div>
<div class="imageblock">
<div class="content">
<img src="/book/en/v2/images/reposettingslink.png" alt="版本库设置链接.">
</div>
<div class="title">Figure 113. 版本库设置链接.</div>
</div>
<div class="paragraph">
<p>然后从左侧菜单中选择 “Collaborators” 。
然后，在输入框中填写用户名，点击 “Add collaborator.”
如果你想授权给多个人，你可以多次重复这个步骤。
如果你想收回权限，点击他们同一行右侧的 “X”</p>
</div>
<div class="imageblock">
<div class="content">
<img src="/book/en/v2/images/collaborators.png" alt="版本库合作者.">
</div>
<div class="title">Figure 114. 版本库合作者.</div>
</div>
</div>
<div class="sect3">
<h3 id="_管理合并请求">管理合并请求</h3>
<div class="paragraph">
<p>现在你有一个包含一些代码的项目，可能还有几个有推送权限的合作者，下面来看当你收到合并请求时该做什么。</p>
</div>
<div class="paragraph">
<p>合并请求可以来自仓库副本的一个分支，或者同一仓库的另一个分支。
唯一的区别是 fork 过来的通常是和你不能互相推送的人，而内部的推送通常都可以互相访问。</p>
</div>
<div class="paragraph">
<p>作为例子，假设你是 “tonychacon” ，你创建了一个名为 “fade” 的 Arduino 项目.</p>
</div>
<div class="sect4">
<h4 id="_email_notifications">邮件通知</h4>
<div class="paragraph">
<p>有人来修改了你的代码，给你发了一个合并请求。
你会收一封关于合并请求的提醒邮件，它看起来像 <a href="ch00/_email_pr">新的合并请求的邮件通知.</a>。</p>
</div>
<div id="_email_pr" class="imageblock">
<div class="content">
<img src="/book/en/v2/images/maint-01-email.png" alt="合并请求的邮件通知">
</div>
<div class="title">Figure 115. 新的合并请求的邮件通知.</div>
</div>
<div class="paragraph">
<p>关于这个邮件有几个要注意的地方。
它会给你一个小的变动统计结果 — 一个包含合并请求中改变的文件和改变了多少的列表。
它还给你一个 GitHub 上进行合并请求操作的链接。
还有几个可以在命令行使用的 URL。</p>
</div>
<div class="paragraph">
<p>如果你注意到 <code>git pull &lt;url&gt; patch-1</code> 这一行，这是一种合并远程分支的简单方式，无需必须添加一个远程分支。
我们很快会在 <a href="ch00/_checking_out_remotes">检出远程分支</a> 讲到它。
如果你愿意，你可以创建并切换到一个主题分支，然后运行这个命令把合并请求合并进来。</p>
</div>
<div class="paragraph">
<p>还有一些有趣的 URL，像 <code>.diff</code> 和 <code>.patch</code> ，就像你猜的那样，它们提供 diff 和 patch 的标准版本。
你可以技术性地用下面的方法合并“合并请求”：</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-console" data-lang="console">$ curl https://github.com/tonychacon/fade/pull/1.patch | git am</code></pre>
</div>
</div>
</div>
<div class="sect4">
<h4 id="_在合并请求上进行合作">在合并请求上进行合作</h4>
<div class="paragraph">
<p>就像我们在 <a href="ch00/_github_flow">GitHub 流程</a> 中说过的，现在你可以跟开启合并请求的人进行会话。
你既可以对某些代码发表评论，也可以对整个提交或整个合并请求发表评论，
在任何地方都可以用 GitHub 风格的 Markdown。</p>
</div>
<div class="paragraph">
<p>每次有人在合并请求上发表了评论，你都会收到邮件，通知你哪里发生了改变。邮件里面包含一个链接，指向改变的位置，你可以直接在邮件中回复，相当于在合并请求上发表评论。</p>
</div>
<div class="imageblock">
<div class="content">
<img src="/book/en/v2/images/maint-03-email-resp.png" alt="邮件回复">
</div>
<div class="title">Figure 116. 回复邮件会包含在帖子（thread）中。</div>
</div>
<div class="paragraph">
<p>一旦代码符合了你的要求，你想把它合并进来，你可以把代码拉取下来在本地进行合并，也可以用我们之前提到过的 <code>git pull &lt;url&gt; &lt;branch&gt;</code> 语法，或者把 fork 添加为一个 remote，然后进行抓取和合并。</p>
</div>
<div class="paragraph">
<p>对于很琐碎的合并，你也可以用 GitHub 网站上的 “Merge” 按钮。
它会做一个 “non-fast-forward” 合并，即使可以快进（fast-forward）合并也会产生一个合并提交记录。
就是说无论如何，只要你点击 merge 按钮，就会产生一个合并提交记录。
你可以在 <a href="ch00/_merge_button">合并按钮和手工合并一个合并请求的指令.</a> 看到，如果你点击提示链接，GitHub 会给你所有的这些信息。</p>
</div>
<div id="_merge_button" class="imageblock">
<div class="content">
<img src="/book/en/v2/images/maint-02-merge.png" alt="合并按钮">
</div>
<div class="title">Figure 117. 合并按钮和手工合并一个合并请求的指令.</div>
</div>
<div class="paragraph">
<p>如果你决定不合并它，你可以把合并请求关掉，开启合并请求的人会收到通知。</p>
</div>
</div>
<div class="sect4">
<h4 id="_pr_refs">合并请求引用</h4>
<div class="paragraph">
<p>如果你正在处理 <strong>许多</strong> 合并请求，不想添加一堆 remote 或者每次都要做一次拉取，这里有一个可以在 GitHub 上用的小技巧。
这是有点高级的技巧，但它相当有用，我们会在 <a href="ch00/_refspec">引用规范</a> 有更多的细节说明。</p>
</div>
<div class="paragraph">
<p>实际上 GitHub 在服务器上把合并请求分支视为一种 “假分支”。
默认情况下你克隆时不会得到它们，但它们还是隐式地存在，你可以很容易地访问到它们。</p>
</div>
<div class="paragraph">
<p>为了展示这个，我们要用到一个叫做 <code>ls-remote</code> 的低级命令（通常被叫做“plumbing”，
我们会在 <a href="ch00/_plumbing_porcelain">底层命令与上层命令</a> 读到更多相关内容）。
这个命令在日常 Git 操作中基本不会用到，但在显示服务器上有哪些引用（reference）时很管用。</p>
</div>
<div class="paragraph">
<p>如果在我们之前用过的 “blink” 版本库上使用这个命令，我们会得到一个版本库里所有的分支，标签和其它引用（reference）的列表。</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-console" data-lang="console">$ git ls-remote https://github.com/schacon/blink
10d539600d86723087810ec636870a504f4fee4d	HEAD
10d539600d86723087810ec636870a504f4fee4d	refs/heads/master
6a83107c62950be9453aac297bb0193fd743cd6e	refs/pull/1/head
afe83c2d1a70674c9505cc1d8b7d380d5e076ed3	refs/pull/1/merge
3c8d735ee16296c242be7a9742ebfbc2665adec1	refs/pull/2/head
15c9f4f80973a2758462ab2066b6ad9fe8dcf03d	refs/pull/2/merge
a5a7751a33b7e86c5e9bb07b26001bb17d775d1a	refs/pull/4/head
31a45fc257e8433c8d8804e3e848cf61c9d3166c	refs/pull/4/merge</code></pre>
</div>
</div>
<div class="paragraph">
<p>当然，如果你在你自己的版本库或其它你想检查的远程版本库中使用 <code>git ls-remote origin</code> ，它会显示相似的内容。</p>
</div>
<div class="paragraph">
<p>如果版本库在 GitHub 上并且有打开的合并请求，你会得到一些以 <code>refs/pull/</code> 开头的引用。
它们实际上是分支，但因为它们不在 <code>refs/heads/</code> 中，所以正常情况下你克隆时不会从服务器上得到它们
——抓取过程正常情况下会忽略它们。</p>
</div>
<div class="paragraph">
<p>每个合并请求有两个引用——其中以 <code>/head</code> 结尾的引用指向的提交记录与合并请求分支中的最后一个提交记录是同一个。
所以如果有人在我们的版本库中开启了一个合并请求，他们的分支叫做 <code>bug-fix</code>，
指向 <code>a5a775</code> 这个提交记录，那么在 <strong>我们的</strong> 版本库中我们没有 <code>bug-fix</code> 分支（因为那是在他们的 fork 中），
但我们 <strong>可以</strong> 有一个 <code>pull/&lt;pr#&gt;/head</code> 指向 <code>a5a775</code>。
这意味着我们可以很容易地拉取每一个合并请求分支而不用添加一堆远程仓库。</p>
</div>
<div class="paragraph">
<p>现在，你可以像直接抓取引用一样抓取那些分支或提交。</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-console" data-lang="console">$ git fetch origin refs/pull/958/head
From https://github.com/libgit2/libgit2
 * branch            refs/pull/958/head -&gt; FETCH_HEAD</code></pre>
</div>
</div>
<div class="paragraph">
<p>这告诉 Git： “连接到 <code>origin</code> 这个 remote，下载名字为 <code>refs/pull/958/head</code> 的引用。”
Git 高高兴兴去执行，下载构建那个引用需要的所有内容，然后把指针指向 <code>.git/FETCH_HEAD</code> 下面你想要的提交记录。
然后你可以用 <code>git merge FETCH_HEAD</code> 把它合并到你想进行测试的分支，但那个合并的提交信息看起来有点怪。
然而，如果你需要审查 <strong>一大批</strong> 合并请求，这样操作会很麻烦。</p>
</div>
<div class="paragraph">
<p>还有一种方法可以抓取 <em>所有的</em> 合并请求，并且在你连接到远程仓库的时候保持更新。
用你最喜欢的编辑器打开 <code>.git/config</code> ，查找 <code>origin</code> 远程仓库。
看起来差不多像下面这样：</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-ini" data-lang="ini">[remote "origin"]
    url = https://github.com/libgit2/libgit2
    fetch = +refs/heads/*:refs/remotes/origin/*</code></pre>
</div>
</div>
<div class="paragraph">
<p>以 <code>fetch =</code> 开头的行是一个 “refspec.”
它是一种把 remote 的名称映射到你本地 <code>.git</code> 目录的方法。
这一条（就是上面的这一条）告诉 Git，“remote 上 <code>refs/heads</code> 下面的内容在我本地版本库中都放在 <code>refs/remotes/origin</code> 。”
你可以把这一段修改一下，添加另一个 refspec：</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-ini" data-lang="ini">[remote "origin"]
    url = https://github.com/libgit2/libgit2.git
    fetch = +refs/heads/*:refs/remotes/origin/*
    fetch = +refs/pull/*/head:refs/remotes/origin/pr/*</code></pre>
</div>
</div>
<div class="paragraph">
<p>最后一行告诉 Git： “所有看起来像 <code>refs/pull/123/head</code> 的引用应该在本地版本库像 <code>refs/remotes/origin/pr/123</code> 一样存储”
现在，如果你保存那个文件，执行 <code>git fetch</code>：</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-console" data-lang="console">$ git fetch
# …
 * [new ref]         refs/pull/1/head -&gt; origin/pr/1
 * [new ref]         refs/pull/2/head -&gt; origin/pr/2
 * [new ref]         refs/pull/4/head -&gt; origin/pr/4
# …</code></pre>
</div>
</div>
<div class="paragraph">
<p>现在所有的合并请求在本地像分支一样展现，它们是只读的，当你执行抓取时它们也会更新。
这让在本地测试合并请求中的代码变得超级简单：</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-console" data-lang="console">$ git checkout pr/2
Checking out files: 100% (3769/3769)， done.
Branch pr/2 set up to track remote branch pr/2 from origin.
Switched to a new branch 'pr/2'</code></pre>
</div>
</div>
<div class="paragraph">
<p>你的鹰眼系统会发现在 refspec 的 remote 部分的结尾有个 <code>head</code> 。
在 GitHub 那边也有一个 <code>refs/pull/#/merge</code> 引用，它代表的是如果你在网站上按了 “merge” 按钮对应的提交记录。
这甚至让你可以在按按钮之前就测试这个合并。</p>
</div>
</div>
<div class="sect4">
<h4 id="_合并请求之上的合并请求">合并请求之上的合并请求</h4>
<div class="paragraph">
<p>你不仅可以在主分支或者说 <code>master</code> 分支上开启合并请求，实际上你可以在网络上的任何一个分支上开启合并请求。
其实，你甚至可以在另一个合并请求上开启一个合并请求。</p>
</div>
<div class="paragraph">
<p>如果你看到一个合并请求在向正确的方向发展，然后你想在这个合并请求上做一些修改或者你不太确定这是个好主意，或者你没有目标分支的推送权限，你可以直接在合并请求上开启一个合并请求。</p>
</div>
<div class="paragraph">
<p>当你开启一个合并请求时，在页面的顶端有一个框框显示你要合并到哪个分支和你从哪个分支合并过来的。
如果你点击那个框框右边的 “Edit” 按钮，你不仅可以改变分支，还可以选择哪个 fork。</p>
</div>
<div id="_pr_targets" class="imageblock">
<div class="content">
<img src="/book/en/v2/images/maint-04-target.png" alt="合并目标">
</div>
<div class="title">Figure 118. 手工修改合并请求的目标.</div>
</div>
<div class="paragraph">
<p>这里你可以很简单地指明合并你的分支到哪一个合并请求或 fork。</p>
</div>
</div>
</div>
<div class="sect3">
<h3 id="_提醒和通知">提醒和通知</h3>
<div class="paragraph">
<p>GitHub 内置了一个很好的通知系统，当你需要与别人或别的团队交流时用起来很方便。</p>
</div>
<div class="paragraph">
<p>在任何评论中你可以先输入一个 <code>@</code> ，系统会自动补全项目中合作者或贡献者的名字和用户名。</p>
</div>
<div class="imageblock">
<div class="content">
<img src="/book/en/v2/images/maint-05-mentions.png" alt="提醒">
</div>
<div class="title">Figure 119. 输入 @ 来提醒某人.</div>
</div>
<div class="paragraph">
<p>你也可以提醒不在列表中的用户，但是通常自动补全用起更快。</p>
</div>
<div class="paragraph">
<p>当你发布了一个带用户提醒的评论，那个用户会收到通知。
这意味着把人们拉进会话中要比让他们投票有效率得多。
对于 GitHub 上的合并请求，人们经常把他们团队或公司中的其它人拉来审查问题或合并请求。</p>
</div>
<div class="paragraph">
<p>如果有人收到了合并请求或问题的提醒，他们会“订阅”它，后面有新的活动发生他们都会持续收到提醒。
如果你是合并请求或者问题的发起方你也会被订阅上，比如你在关注一个版本库或者你评论了什么东西。
如果你不想再收到提醒，在页面上有个 “Unsubscribe” 按钮，点一下就不会再收到更新了。</p>
</div>
<div class="imageblock">
<div class="content">
<img src="/book/en/v2/images/maint-06-unsubscribe.png" alt="取消订阅">
</div>
<div class="title">Figure 120. 取消订阅一个问题或合并请求.</div>
</div>
</div>
<div class="sect3">
<h3 id="_通知页面">通知页面</h3>
<div class="paragraph">
<p>当我们在这提到特指 GitHub 的 “notifications” ，指的是当 GitHub 上有事件发生时，它通知你的方式，这里有几种不同的方式来配置它们。
如果你打开配置页面的 “Notification center” 标签，你可以看到一些选项。</p>
</div>
<div class="imageblock">
<div class="content">
<img src="/book/en/v2/images/maint-07-notifications.png" alt="通知中心">
</div>
<div class="title">Figure 121. 通知中心选项.</div>
</div>
<div class="paragraph">
<p>有两个选项，通过“邮件（Email）”和通过“网页（Web）”，你可以选用一个或者都不选或者都选。</p>
</div>
</div>
<div class="sect3">
<h3 id="_网页通知">网页通知</h3>
<div class="paragraph">
<p>网页通知只在 GitHub 上存在，你也只能在 GitHub 上查看。
如果你打开了这个选项并且有一个你的通知，你会在你屏幕上方的通知图标上看到一个小蓝点。参见 <a href="ch00/_not_center">通知中心.</a>。</p>
</div>
<div id="_not_center" class="imageblock">
<div class="content">
<img src="/book/en/v2/images/maint-08-notifications-page.png" alt="通知中心">
</div>
<div class="title">Figure 122. 通知中心.</div>
</div>
<div class="paragraph">
<p>如果你点击那个玩意儿，你会看到你被通知到的所有条目，按照项目分好了组。
你可以点击左边栏的项目名字来过滤项目相关的通知。
你可以点击通知旁边的对号图标把通知标为已读，或者点击组上面的图标把项目中 <strong>所有的</strong> 通知标为已读。
在每个对号图标旁边都有一个静音按钮，你可以点一下，以后就不会收到它相关的通知。</p>
</div>
<div class="paragraph">
<p>所有这些工具对于处理大量通知非常有用。
很多 GitHub 资深用户都关闭邮件通知，在这个页面上处理他们所有的通知。</p>
</div>
</div>
<div class="sect3">
<h3 id="_邮件通知">邮件通知</h3>
<div class="paragraph">
<p>邮件通知是你处理 GitHub 通知的另一种方式。
如果你打开这个选项，每当有通知时，你会收到一封邮件。
我们在 <a href="ch00/_email_notification">通过电子邮件发送的评论提醒</a> 和 <a href="ch00/_email_pr">新的合并请求的邮件通知.</a> 看到了一些例子。
邮件也会被合适地按话题组织在一起，如果你使用一个具有会话功能的邮件客户端那会很方便。</p>
</div>
<div class="paragraph">
<p>GitHub 在发送给你的邮件头中附带了很多元数据，这对于设置过滤器和邮件规则非常有帮助。</p>
</div>
<div class="paragraph">
<p>举个例子，我们来看一看在 <a href="ch00/_email_pr">新的合并请求的邮件通知.</a> 中发给 Tony 的一封真实邮件的头部，我们会看到下面这些：</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-mbox" data-lang="mbox">To: tonychacon/fade &lt;fade@noreply.github.com&gt;
Message-ID: &lt;tonychacon/fade/pull/1@github.com&gt;
Subject: [fade] Wait longer to see the dimming effect better (#1)
X-GitHub-Recipient: tonychacon
List-ID: tonychacon/fade &lt;fade.tonychacon.github.com&gt;
List-Archive: https://github.com/tonychacon/fade
List-Post: &lt;mailto:reply+i-4XXX@reply.github.com&gt;
List-Unsubscribe: &lt;mailto:unsub+i-XXX@reply.github.com&gt;，...
X-GitHub-Recipient-Address: tchacon@example.com</code></pre>
</div>
</div>
<div class="paragraph">
<p>这里有一些有趣的东西。如果你想高亮或者转发这个项目甚至这个合并请求相关的邮件，
<code>Message-ID</code> 中的信息会以`&lt;user&gt;/&lt;project&gt;/&lt;type&gt;/&lt;id&gt;` 的格式展现所有的数据。
例如，如果这是一个问题（issue），那么 <code>&lt;type&gt;</code> 字段就会是 “issues” 而不是 “pull” 。</p>
</div>
<div class="paragraph">
<p><code>List-Post</code> 和 <code>List-Unsubscribe</code> 字段表示如果你的邮件客户端能够处理这些，那么你可以很容易地在列表中发贴或取消对这个相关帖子的订阅。
那会很有效率，就像在页面中点击静音按钮或在问题/合并请求页面点击 “Unsubscribe” 一样。</p>
</div>
<div class="paragraph">
<p>值得注意的是，如果你同时打开了邮件和网页通知，那么当你在邮件客户端允许加载图片的情况下阅读邮件通知时，对应的网页通知也将会同时被标记为已读。</p>
</div>
</div>
<div class="sect3">
<h3 id="_特殊文件">特殊文件</h3>
<div class="paragraph">
<p>如果你的版本库中有一些特殊文件，GitHub 会提醒你。</p>
</div>
</div>
<div class="sect3">
<h3 id="_readme">README</h3>
<div class="paragraph">
<p>第一个就是 <code>README</code> 文件，可以是几乎任何 GitHub 可以识别的格式。
例如，它可以是 <code>README</code> ，<code>README.md</code> ， <code>README.asciidoc</code> 。
如果 GitHub 在你的版本库中找到 README 文件，会把它在项目的首页渲染出来。</p>
</div>
<div class="paragraph">
<p>很多团队在这个文件里放版本库或项目新人需要了解的所有相关的信息。
它一般包含这些内容：</p>
</div>
<div class="ulist">
<ul>
<li>
<p>该项目的作用</p>
</li>
<li>
<p>如何配置与安装</p>
</li>
<li>
<p>有关如何使用和运行的例子</p>
</li>
<li>
<p>项目的许可证</p>
</li>
<li>
<p>如何向项目贡献力量</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>因为 GitHub 会渲染这个文件，你可以在文件里植入图片或链接让它更容易理解。</p>
</div>
</div>
<div class="sect3">
<h3 id="_贡献_contributing">贡献 CONTRIBUTING</h3>
<div class="paragraph">
<p>另一个 GitHub 可以识别的特殊文件是 <code>CONTRIBUTING</code> 。
如果你有一个任意扩展名的 <code>CONTRIBUTING</code> 文件，当有人开启一个合并请求时 GitHub 会显示 <a href="ch00/_contrib_file">开启合并请求时有 CONTRIBUTING 文件存在.</a>。</p>
</div>
<div id="_contrib_file" class="imageblock">
<div class="content">
<img src="/book/en/v2/images/maint-09-contrib.png" alt="贡献注意事项">
</div>
<div class="title">Figure 123. 开启合并请求时有 CONTRIBUTING 文件存在.</div>
</div>
<div class="paragraph">
<p>这个的作用就是你可以在这里指出对于你的项目开启的合并请求你想要的／不想要的各种事情。
这样别人在开启合并请求之前可以读到这些指导方针。</p>
</div>
</div>
<div class="sect3">
<h3 id="_项目管理">项目管理</h3>
<div class="paragraph">
<p>对于一个单个项目其实没有很多管理事务要做，但也有几点有趣的。</p>
</div>
<div class="sect4">
<h4 id="_改变默认分支">改变默认分支</h4>
<div class="paragraph">
<p>如果你想用 “master” 之外的分支作为你的默认分支，其他人将默认会在这个分支上开启合并请求或进行浏览，你可以在你版本库的设置页面的 "options" 标签下修改。</p>
</div>
<div id="_default_branch" class="imageblock">
<div class="content">
<img src="/book/en/v2/images/maint-10-default-branch.png" alt="默认分支">
</div>
<div class="title">Figure 124. 改变项目的默认分支.</div>
</div>
<div class="paragraph">
<p>简单地改变默认分支下拉列表中的选项，它就会作为所有主要操作的默认分支，他人进行克隆时该分支也将被默认检出。</p>
</div>
</div>
<div class="sect4">
<h4 id="_移交项目">移交项目</h4>
<div class="paragraph">
<p>如果你想把一个项目移交给 GitHub 中的另一个人或另一个组织，还是设置页面的这个 “options” 标签下有一个 “Transfer ownership” 选项可以用来干这个。</p>
</div>
<div id="_transfer_project" class="imageblock">
<div class="content">
<img src="/book/en/v2/images/maint-11-transfer.png" alt="移交">
</div>
<div class="title">Figure 125. 把项目移交给另一个 GitHub 用户或组织。</div>
</div>
<div class="paragraph">
<p>当你正准备放弃一个项目且正好有别人想要接手时，或者你的项目壮大了想把它移到一个组织里时，这就管用了。</p>
</div>
<div class="paragraph">
<p>这么做不仅会把版本库连带它所有的关注者和星标数都移到另一个地方，它还会将你的 URL 重定向到新的位置。
它也重定向了来自 Git 的克隆和抓取，而不仅仅是网页端请求。</p>
</div>
</div>
</div>
<div id="nav"><a href="/book/zh/v2/GitHub-%E5%AF%B9%E9%A1%B9%E7%9B%AE%E5%81%9A%E5%87%BA%E8%B4%A1%E7%8C%AE">prev</a> | <a href="/book/zh/v2/GitHub-%E7%AE%A1%E7%90%86%E7%BB%84%E7%BB%87">next</a></div></div>
</div>

        </div>
      </div>
      <footer>
  <div class="site-source">
    <a href="/site">About this site</a><br>
    Patches, suggestions, and comments are welcome.
  </div>
  <div class="sfc-member">
    Git is a member of <a href="/sfc">Software Freedom Conservancy</a>
  </div>
</footer>
<a href="#top" class="no-js scrollToTop" id="scrollToTop" data-label="Scroll to top">
  <img src="/images/icons/chevron-up@2x.png" width="20" height="20" alt="scroll-to-top"/>
</a>
<script src="/assets/application-b09f91f7c527919e4bc194769429065537d64a7f73b9fe93b107afef32b02939.js"></script>

    </div>

</body>
</html>
